package hypeerweb;

import java.util.HashSet;
import java.util.Iterator;
import java.util.List;

import states.NodeState;

public interface NodeInterface {
	public void AddMe(Node node);
	public void ReplaceMe(Node node);
	public void DeleteMe(Node node);


	
	//Node Methods
	public WebId getWebId();
	public int getId();

	public int getHeight();

	public List<Node> getNeighbors();

	// to get Surrogate Neighbors
	public List<Node> getDownPointers();

	// to get Inverse Surrogate Neighbors
	public List<Node> getUpPointers();

	public Connections getConnections();
	public void setWebId(WebId webId);

	public void setConnections(Connections connect);
	public void updateConnections(Connections otherConnect, WebId otherId, NodeState otherState);

	public void addNeighbor(Node neighbor);


	public void removeNeighbor(Node neighbor);

	public void addUpPointer(Node upPointer);

	public void removeUpPointer(Node upPointer);

	public void addDownPointer(Node downPointer);

	public void removeDownPointer(Node downPointer);

	public void setFold(Node newFold);

	public void setSurrogateFold(Node newSurrogateFold);

	public void setInverseSurrogateFold(Node newInverseSurrogateFold);

	public Node getFold();

	public Node getSurrogateFold();

	public Node getInverseSurrogateFold();

	public void addChild(Node newNode);

	public int compareTo(Node arg0);
	public boolean equals(Object obj);

	public void addToHyPeerWeb(Node node);

	public Node findTerminalNode();

	public Node findInsertionPoint();

	public SimplifiedNodeDomain constructSimplifiedNodeDomain();

	public Node getLargestConnection();

	public Node getSmallestSurrNeighbor();

	public Node getSmallestNeighborWithoutChild();

	public Node getLargestISN();

}
